package hot100;

/**
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 *
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 * 返回容器可以储存的最大水量。
 *
 * 说明：你不能倾斜容器。
 */
public class maxArea_ {

    // 第i条线和第j条线之间存储的水量为: Math.min(height[i],height[j]) * Math.abs(i - j)
    // 水量为高度最小值 * 指针之间的距离
    // 每次移动指向高度最小值的指针
    // 因为指针之间的距离无法操作, 只有指向的值能够操作

    // [1,5,6,3,4,8,9,5]
    // left = 0, 指向1
    // right = 8 - 1 指向5
    // left和right之间的水量为 min(1,5) * 7
    // left指向最小值, 需要下一次循环时, left向右移动
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxValue = 0;
        while(left < right){
            maxValue = Math.max(maxValue, Math.min(height[left],height[right]) * Math.abs(left - right));
            if (height[left] < height[right]){
                left ++;
            }
            else{
                right --;
            }
        }
        return maxValue;
    }
}
